/***********************************************
 *              迭代法(iteration)
 * 
 ***********************************************/
package algorithm;

public class Iteration 
{
        /**
         * 打印杨辉三角（迭代法之倒推法）
         * @param floor 三角的层数
         */
        public void printYHTri(int floor)
        {
                int a[] = new int[100];
                
                System.out.println(1);

                a[1] = 1;
                a[2] = 1;
                
                System.out.print ( a[1] );
                System.out.println ( a[2] );
                
                for (int i = 3;  i <= floor; i++)
                {
                        a[1] = 1;        // 每行的第一列 和最后一列为1
                        a[i] = 1;
                        
                       for (int j = i; j > 2; j--)
                       {
                               if ((j-1) > 1)
                               {
                                       a[j-1] =  a[j-1] + a[j-2];
                               }
                       }
                       for (int m = 1; m <= i; m++ )
                       {
                               System.out.print (a[m]);
                       }

                       System.out.println();
                }
        }
        
        /**
         * 二分法求解方程
         * @param a     定义域的上限
         * @param b     定义域的下限
         * @param x1    试探值的上限
         * @param x2    试探值的下限
         * @return
         */
        public float divRoot (int a, int b, float x1, float x2)
        {
                
                double f1 = 0.5 * Math.pow(x1, 3) + 2 * Math.pow(x1, 2) - 8;
                double f2 = 0.5 * Math.pow(x2, 3) + 2 * Math.pow(x2, 2) - 8;
                float x;
                float f;
                
                if( f1 * f2 > 0)        // 该方程无解
                {
                        System.out.println("No root");
                        return 0;
                }

                do
                {
                        x = (float) 0.5 * (x1 + x2);
                        
                        f = (float) (0.5 * Math.pow(x, 3) + 2 * Math.pow(x, 2) - 8);
                        if (f != 0)
                        {
                                if (f * f1 < 0)         // 
                                {
                                        x2 = x;
                                        f2= (float) (0.5 * Math.pow(x2, 3) + 2 * Math.pow(x2, 2) - 8);
                                }
                                else
                                {
                                        x1 = x;
                                        f1 = (float) (0.5 * Math.pow(x1, 3) + 2 * Math.pow(x1, 2) - 8);
                                }
                        }
                        else
                        {
                                System.out.println("this root is " + x);
                                return x;                               // 即 根
                        }
                }
                while (Math.abs(f) > 1e-4);              // 当误差小于 0.0001时结束循环
                
                System.out.print("this root of this function is :" + x);
                return x;
        }
        
}
